class Solution {
    //两只单身狗
    public int[] singleNumbers(int[] nums) {
        int len = nums.length;
        int ret = 0;
        int i = 0;
        //先把这两个数都异或在一起
        for(i = 0;i<len;i++) {
            ret^=nums[i];
        }
        //找到ret二进制位中的最后一个1,证明这两个数的二进制在这一位不同(一个0一个1)
        int tem = ret;
        int sum = 0;
        while(tem!=0) {
            if(1 == (tem&1)) {
                break;
            }
            sum++;
            tem>>>=1;
        }
        tem = 0;
        //把找到ret二进制位中的最后一位都为1的异或在一起
        for(i = 0;i<len;i++) {
            //判断对应位是不是为1
            if(1 == ((nums[i]>>sum)&1)) {
                tem^=nums[i];
            }
        }
        //得到的tem是其中一个单身狗
        int num = ret^=tem;
        return new int[]{num,tem};
    }
}